// -----------------------------
// Author: 		Dhaenens Gert 
// Creation: 	12/8/2014 8:45:08 PM				
// -----------------------------

#ifndef _DxShapes_h
#define _DxShapes_h

#include "DxLibTypeDef.h"

namespace DxLib
{

	struct DXLIB Vector2F
	{
		Float	X;
		Float	Y;

		Vector2F();
		Vector2F(Float x, Float y);
		Vector2F(const Vector2F& refVector2F);
		Vector2F& operator=(const Vector2F& refVector2F);
	};

	struct DXLIB Vector2U
	{
		UInt32	X;
		UInt32	Y;

		Vector2U();
		Vector2U(UInt32 x, UInt32 y);
		Vector2U(const Vector2U& refVector2U);
		Vector2U& operator=(const Vector2U& refVector2U);
	};

	struct DXLIB Vector3F
	{
		Float	X;
		Float	Y;
		Float	Z;

		Vector3F();
		Vector3F(Float x, Float y, Float z);
		Vector3F(const Vector3F& refVector3F);
		Vector3F& operator=(const Vector3F& refVector3F);
	};

	struct DXLIB Vector3U
	{
		UInt32	X;
		UInt32	Y;
		UInt32	Z;

		Vector3U();
		Vector3U(UInt32 x, UInt32 y, UInt32 z);
		Vector3U(const Vector3U& refVector3U);
		Vector3U& operator=(const Vector3U& refVector3U);
	};

	struct DXLIB Vector4F
	{
		Float	X;
		Float	Y;
		Float	Z;
		Float	W;

		Vector4F();
		Vector4F(Float x, Float y, Float z, Float w);
		Vector4F(const Vector4F& refVector4F);
		Vector4F& operator=(const Vector4F& refVector4F);
	};

	struct DXLIB Vector4U
	{
		UInt32	X;
		UInt32	Y;
		UInt32	Z;
		UInt32	W;

		Vector4U();
		Vector4U(UInt32 x, UInt32 y, UInt32 z, UInt32 w);
		Vector4U(const Vector4U& refVector4U);
		Vector4U& operator=(const Vector4U& refVector4U);
	};

	struct DXLIB RectF
	{
		Float	Left;
		Float	Top;
		Float	Right;
		Float	Bottom;

		RectF();
		RectF(Float left, Float top, Float right, Float bottom);
		RectF(const Vector2F& leftTop, Float width, Float height);
		RectF(const RectF& refRectF);
		RectF& operator=(const RectF& refRectF);

		Float	Width() const;
		Float	Height() const;
	};

	struct DXLIB RectU
	{
		UInt32	Left;
		UInt32	Top;
		UInt32	Right;
		UInt32	Bottom;

		RectU();
		RectU(UInt32 left, UInt32 top, UInt32 right, UInt32 bottom);
		RectU(const Vector2U& leftTop, UInt32 width, UInt32 height);
		RectU(const RectU& refRectU);
		RectU& operator=(const RectU& refRectU);

		UInt32	Width() const;
		UInt32	Height() const;
	};

	struct DXLIB EllipseF
	{
		Float	CenterX;
		Float	CenterY;
		Float	RadiusX;
		Float	RadiusY;

		EllipseF();
		EllipseF(Float centerX, Float centerY, Float radiusX, Float radiusY);
		EllipseF(Float centerX, Float centerY, Float radius);
		EllipseF(const Vector2F& center, Float radiusX, Float radiusY);
		EllipseF(const Vector2F& center, Float radius);
		EllipseF(const EllipseF& refEllipseF);
		EllipseF& operator=(const EllipseF& refEllipseF);
	};

	struct DXLIB EllipseU
	{
		UInt32	CenterX;
		UInt32	CenterY;
		UInt32	RadiusX;
		UInt32	RadiusY;

		EllipseU();
		EllipseU(UInt32 centerX, UInt32 centerY, UInt32 radiusX, UInt32 radiusY);
		EllipseU(UInt32 centerX, UInt32 centerY, UInt32 radius);
		EllipseU(const Vector2U& center, UInt32 radiusX, UInt32 radiusY);
		EllipseU(const Vector2U& center, UInt32 radius);
		EllipseU(const EllipseU& refEllipseU);
		EllipseU& operator=(const EllipseU& refEllipseU);
	};

}

#endif